package com.sugar.follow.up.module.business.dal.mysql.questionnairerecord;

import com.sugar.follow.up.framework.common.pojo.PageResult;
import com.sugar.follow.up.framework.mybatis.core.mapper.BaseMapperX;
import com.sugar.follow.up.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.sugar.follow.up.module.business.controller.admin.questionnairerecord.vo.QuestionnaireRecordPageReqVO;
import com.sugar.follow.up.module.business.controller.admin.questionnairerecord.vo.QuestionnaireRecordRespVO;
import com.sugar.follow.up.module.business.dal.dataobject.questionnairerecord.QuestionnaireRecordDO;
import com.sugar.follow.up.module.business.dal.dataobject.questionnairetemplate.QuestionnaireTemplateDO;
import com.sugar.follow.up.module.business.dal.dataobject.userpatient.UserPatientDO;
import com.sugar.follow.up.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.ibatis.annotations.Mapper;

/**
 * 问卷发起记录 Mapper
 *
 * @author Ysugar
 */
@Mapper
public interface QuestionnaireRecordMapper extends BaseMapperX<QuestionnaireRecordDO> {

    default PageResult<QuestionnaireRecordRespVO> selectPage(QuestionnaireRecordPageReqVO reqVO, Long doctorId) {
        Long[] userIds = reqVO.getUserId();
        Long userId = null;
        Long patientId = null;
        if (userIds != null && userIds.length == 2) {
            userId = userIds[0];
            patientId = userIds[1];
        }

        return selectJoinPage(reqVO, QuestionnaireRecordRespVO.class, new MPJLambdaWrapperX<QuestionnaireRecordDO>()
                .selectAll(QuestionnaireRecordDO.class)
                .selectAs(AdminUserDO::getNickname, QuestionnaireRecordRespVO::getAdminUserName)
                .selectAs(UserPatientDO::getName, QuestionnaireRecordRespVO::getPatientName)
                .selectAs(UserPatientDO::getMobile, QuestionnaireRecordRespVO::getPatientMobile)
                .selectAs(QuestionnaireTemplateDO::getTitle, QuestionnaireRecordRespVO::getTemplateName)
                .leftJoin(AdminUserDO.class, AdminUserDO::getId, QuestionnaireRecordDO::getAdminUserId)
                .leftJoin(UserPatientDO.class, UserPatientDO::getId, QuestionnaireRecordDO::getPatientId)
                .leftJoin(QuestionnaireTemplateDO.class, QuestionnaireTemplateDO::getId, QuestionnaireRecordDO::getTemplateId)
                .eqIfPresent(QuestionnaireRecordDO::getTemplateId, reqVO.getTemplateId())
                .eqIfPresent(QuestionnaireRecordDO::getUserId, userId)
                .eqIfPresent(QuestionnaireRecordDO::getPatientId, patientId)
                .eqIfPresent(QuestionnaireRecordDO::getAdminUserId, doctorId)
                .likeIfPresent(AdminUserDO::getNickname, reqVO.getAdminUserId())
                .likeIfPresent(QuestionnaireRecordDO::getTitle, reqVO.getTitle())
                .betweenIfPresent(QuestionnaireRecordDO::getBeginTime, reqVO.getBeginTime())
                .betweenIfPresent(QuestionnaireRecordDO::getEndTime, reqVO.getEndTime())
                .betweenIfPresent(QuestionnaireRecordDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(QuestionnaireRecordDO::getId));
    }

}